package com.tedu.api.io;

import com.sun.xml.internal.ws.wsdl.writer.document.StartWithExtensionsType;
import org.junit.Test;

import java.io.*;
import java.util.Scanner;

/**
 * 案例：做一个记事本程序
 * 需求：程序开始之后，要求用户【从控制台】输入文件名-->假设：  a.txt
 *      然后，针对文件运行读写操作
 *      用户可以在【控制台】输入一行文本内容，需求：写入 a.txt文件中
 *      判断，如果用户输入“推出/exit”，程序结束
 *      a.txt直接出现  javaAPI  项目下   保存对应文本的内容
 *
 *
 * 需求：1.标准流---结合异常处理
 *      2.输出流--->输入流【读】   单元测试(@Test)   testNote(){}
 */
public class Note {
    //单元测试：相对路径  ./a.txt 当前父级文件夹路径   API 下
    //主方法： 相对路径   ./a.txt 当前根级文件夹路径  javaAPI下
    public static void main(String[] args) throws UnsupportedEncodingException, FileNotFoundException {

            //1.从控制台输入：a.txt     文本
            Scanner input = new Scanner(System.in);
            System.out.println("请输入文件名：");
            String text = input.nextLine();//获取一行文本
            //System.out.println(text);  打桩
            //2.流---写
            FileOutputStream fos = new FileOutputStream(text);
            OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF8");//转换流
            BufferedWriter bw = new BufferedWriter(osw);//缓冲输出流--加速字符串传输
            PrintWriter pw = new PrintWriter(bw);
            //3.在假设a.txt   写入文件---一直写入，直到写出文件“退出/exit”
            //3.1定义字符串变量---赋值为null 接收用户每次输入“文本内容”
             String line = null;
            //3.2【补充：考虑到用户体验】提示内容
            System.out.println("请开始输入内容【例：“退出”->“程序结束”】");
            //3.2 一直写入
            while (true) {
                line = input.nextLine();//从控制台获取一行文本
                //3.3 判断条件--判断line是否等于退出或者 exit 程序结束
                if (line.equals("退出") || line.equals("exit")) {
                    break;//跳出方法体
                }
                //3.4 PW字符输出流--写出
                pw.println(line);
            }

            //3.5【用户体验】拜拜~
            System.out.println("拜拜~");
            //3.6关闭高级流
            pw.close();

    }


@Test
        public void testNote(){

        FileOutputStream fos = null;
        OutputStreamWriter osw = null;
        BufferedWriter bw = null;
        PrintWriter pw = null;
        //try/catch/finally适配IO  捕获异常---关流【高级流】

        try {

            //1.从控制台输入：a.txt     文本
            Scanner input = new Scanner(System.in);
            System.out.println("请输入文件名：");
            String text = input.nextLine();//获取一行文本
            //System.out.println(text);  打桩
            //2.流---写
            fos = new FileOutputStream(text);
            osw = new OutputStreamWriter(fos, "UTF8");//转换流
            bw = new BufferedWriter(osw);//缓冲输出流--加速字符串传输
            pw = new PrintWriter(bw);
            //3.在假设a.txt   写入文件---一直写入，直到写出文件“退出/exit”
            //3.1定义字符串变量---赋值为null 接收用户每次输入“文本内容”
            String line = null;
            //3.2【补充：考虑到用户体验】提示内容
            System.out.println("请开始输入内容【例：“退出”->“程序结束”】");
            //3.2 一直写入
            while (true) {
                line = input.nextLine();//从控制台获取一行文本
                //3.3 判断条件--判断line是否等于退出或者 exit 程序结束
                if (line.equals("退出") || line.equals("exit")) {
                    break;//跳出方法体
                }
                //3.4 PW字符输出流--写出
                pw.println(line);

            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //3.5【用户体验】拜拜~
            System.out.println("拜拜~");
            //3.6关闭高级流
            pw.close();
        }
    }

}
